<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>auto_date_histogram 聚合 | ElasticSearch 7.7 权威指南中文版</title>
	<meta name="keywords" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <meta name="description" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
	<script>
	var _link = 'search-aggregations-bucket-autodatehistogram-aggregation.html';
    </script>
</head>
<body>
<div class="main-container">
    <section id="content">
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/search-aggregations-bucket-autodatehistogram-aggregation.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/7.7/search-aggregations-bucket-autodatehistogram-aggregation.html</a>, 原文档版权归 www.elastic.co 所有<br/>本地英文版地址: <a href="../en/search-aggregations-bucket-autodatehistogram-aggregation.html" rel="nofollow" target="_blank">../en/search-aggregations-bucket-autodatehistogram-aggregation.html</a></div>
                        <!-- start body -->
                  <div class="page_header">
<strong>重要</strong>: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html" rel="nofollow">当前版本文档</a>。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch 权威指南 [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="search-aggregations.html">聚合</a></span>
»
<span class="breadcrumb-link"><a href="search-aggregations-bucket.html">桶(bucket)聚合</a></span>
»
<span class="breadcrumb-node">auto_date_histogram 聚合</span>
</div>
<div class="navheader">
<span class="prev">
<a href="search-aggregations-bucket-adjacency-matrix-aggregation.html">« adjacency_matrix 聚合</a>
</span>
<span class="next">
<a href="search-aggregations-bucket-children-aggregation.html">children 聚合 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="search-aggregations-bucket-autodatehistogram-aggregation"></a>自动间隔的日期直方图(auto_date_histogram)聚合
</h2>
</div></div></div>
<p>
一个类似于<a class="xref" href="search-aggregations-bucket-datehistogram-aggregation.html" title="日期直方图聚合" rel="nofollow">日期直方图聚合</a>的多桶聚合，但不是靠给定的 间隔(interval) 来作为每个桶的宽度，而是给定目标桶的数量来指示所需的桶数，并且自动选择桶的间隔以用最好的方式来实现该目标。

返回的桶数将始终小于或等于该目标数。
</p>
<p>
buckets 字段是可选的，如果未指定，将默认为 10 个桶。
</p>
<p>以10个桶为目标进行请求。</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /sales/_search?size=0
{
    "aggs" : {
        "sales_over_time" : {
            "auto_date_histogram" : {
                "field" : "date",
                "buckets" : 10
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/413.console"></div>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_keys"></a>键(key)
</h3>
</div></div></div>
<p>
在内部，一个日期被表示为一个64位的数字-一个时间戳，以毫秒为单位。

这些时间戳作为桶的<code class="literal">键(key)</code>返回。

<code class="literal">key_as_string</code> 是使用 <code class="literal">format</code> 参数指定的格式(format)转换为格式化的日期字符串的相同时间戳:
</p>
<div class="tip admon">
<div class="icon"></div>
<div class="admon_content">
<p>
如果未指定 <code class="literal">format</code>(格式)，则它将使用字段映射中指定的第一个日期 <a class="xref" href="mapping-date-format.html" title="格式" rel="nofollow">格式(format)</a>。
</p>
</div>
</div>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /sales/_search?size=0
{
    "aggs" : {
        "sales_over_time" : {
            "auto_date_histogram" : {
                "field" : "date",
                "buckets" : 5,
                "format" : "yyyy-MM-dd" <a id="CO210-1"></a><i class="conum" data-value="1"></i>
            }
        }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/414.console"></div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO210-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>
支持表达性的日期 <a class="xref" href="search-aggregations-bucket-daterange-aggregation.html#date-format-pattern" title="Date Format/Pattern" rel="nofollow">格式模式</a>
</p>
</td>
</tr>
</table>
</div>
<p>响应：</p>
<div class="pre_wrapper lang-console-result">
<pre class="programlisting prettyprint lang-console-result">{
    ...
    "aggregations": {
        "sales_over_time": {
            "buckets": [
                {
                    "key_as_string": "2015-01-01",
                    "key": 1420070400000,
                    "doc_count": 3
                },
                {
                    "key_as_string": "2015-02-01",
                    "key": 1422748800000,
                    "doc_count": 2
                },
                {
                    "key_as_string": "2015-03-01",
                    "key": 1425168000000,
                    "doc_count": 2
                }
            ],
            "interval": "1M"
        }
    }
}</pre>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_intervals"></a>间隔(interval)
</h3>
</div></div></div>
<p>
基于聚合收集的数据选择返回桶的间隔，使得返回的桶的数量小于或等于请求的数量。

返回的间隔可能是：
</p>
<div class="informaltable">
<table border="0" cellpadding="4px">
<colgroup>
<col>
<col>
</colgroup>
<tbody valign="top">
<tr>
<td valign="top">
<p>
seconds
</p>
</td>
<td valign="top">
<p>
以1、5、10和30的倍数
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
minutes
</p>
</td>
<td valign="top">
<p>
以1、5、10和30的倍数
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
hours
</p>
</td>
<td valign="top">
<p>
以1、3和12的倍数
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
days
</p>
</td>
<td valign="top">
<p>
以1和7的倍数
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
months
</p>
</td>
<td valign="top">
<p>
以1和3的倍数
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
years
</p>
</td>
<td valign="top">
<p>
以1、5、10、20、50和100的倍数
</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>在最坏的情况下，对于请求的桶数，每日桶数太多，返回的桶数将是请求的桶数的1/7。</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_time_zone"></a>时区(time zone)
</h3>
</div></div></div>
<p>
日期时间以 UTC 存储在 Elasticsearch 中。

默认情况下，所有的分桶和舍入也在 UTC 中完成。

<code class="literal">time_zone</code> 参数可用于指示分桶时应该使用不同的时区。
</p>
<p>
时区可以指定为 ISO 8601 UTC 时差(例如<code class="literal">+01:00</code> 或 <code class="literal">-08:00</code>)，也可以指定为时区id(在TZ数据库中使用的标识符)，比如<code class="literal">America/Los_Angeles</code>。
</p>
<p>看下面这个例子：</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">
#添加并索引3个文档
PUT my_index/log/1?refresh
{
  "date": "2015-10-01T00:30:00Z"
}

PUT my_index/log/2?refresh
{
  "date": "2015-10-01T01:30:00Z"
}

PUT my_index/log/3?refresh
{
  "date": "2015-10-01T02:30:00Z"
}

#搜索
GET my_index/_search?size=0
{
  "aggs": {
    "by_day": {
      "auto_date_histogram": {
        "field":     "date",
        "buckets" : 3
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/415.console"></div>
<p>如果未指定时区则使用 UTC，从 UTC 时间的 2015年10月1日午夜开始返回3个1小时间隔的桶:</p>
<div class="pre_wrapper lang-console-result">
<pre class="programlisting prettyprint lang-console-result">{
  ...
  "aggregations": {
    "by_day": {
      "buckets": [
        {
          "key_as_string": "2015-10-01T00:00:00.000Z",
          "key": 1443657600000,
          "doc_count": 1
        },
        {
          "key_as_string": "2015-10-01T01:00:00.000Z",
          "key": 1443661200000,
          "doc_count": 1
        },
        {
          "key_as_string": "2015-10-01T02:00:00.000Z",
          "key": 1443664800000,
          "doc_count": 1
        }
      ],
      "interval": "1h"
    }
  }
}</pre>
</div>
<p>如果指定了<code class="literal">time_zone</code>的值为<code class="literal">-01:00</code>，则午夜从 UTC 午夜前一小时开始：</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET my_index/_search?size=0
{
  "aggs": {
    "by_day": {
      "auto_date_histogram": {
        "field":     "date",
        "buckets" : 3,
        "time_zone": "-01:00"
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/416.console"></div>
<p>现在仍返回3个1小时间隔的桶，但第一个桶开始于2015年9月30日晚上11:00，因为这是该时段在指定时区的当地时间。</p>
<div class="pre_wrapper lang-console-result">
<pre class="programlisting prettyprint lang-console-result">{
  ...
  "aggregations": {
    "by_day": {
      "buckets": [
        {
          "key_as_string": "2015-09-30T23:00:00.000-01:00", <a id="CO211-1"></a><i class="conum" data-value="1"></i>
          "key": 1443657600000,
          "doc_count": 1
        },
        {
          "key_as_string": "2015-10-01T00:00:00.000-01:00",
          "key": 1443661200000,
          "doc_count": 1
        },
        {
          "key_as_string": "2015-10-01T01:00:00.000-01:00",
          "key": 1443664800000,
          "doc_count": 1
        }
      ],
      "interval": "1h"
    }
  }
}</pre>
</div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO211-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p><code class="literal">key_as_string</code> 值表示指定时区中每天的午夜。</p>
</td>
</tr>
</table>
</div>
<div class="warning admon">
<div class="icon"></div>
<div class="admon_content">
<p>
当使用跟随 DST(夏令时)变化的时区时，靠近这些变化发生时刻的桶可能与相邻桶的大小略有不同。

例如，在 <code class="literal">CET</code> 时区开始夏令时：2016年3月27日凌晨2点，时钟拨快1小时至当地时间凌晨3点。

如果聚合的结果是每日一个桶，则当天的时段将仅保存23小时的数据，而不是其他时段通常的24小时。

对于较短的时间间隔，例如12小时，情况也是如此。

在这里，当夏令时转换发生时，我们在3月27日早上只有一个11小时的桶。
</p>
</div>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_scripts"></a>脚本
</h3>
</div></div></div>
<p>
与普通的 <a class="xref" href="search-aggregations-bucket-datehistogram-aggregation.html" title="Date histogram aggregation"><code class="literal">date_histogram</code></a>（日期直方图） 一样，文档级脚本和值级脚本都受支持。

但是，此聚合不支持<code class="literal">min_doc_count</code>、<code class="literal">extended_bounds</code> 及 <code class="literal">order</code>参数。
</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_minimum_interval_parameter"></a>参数 minimum_interval 
</h3>
</div></div></div>
<p>
<code class="literal">minimum_interval</code> 允许调用者指定应该使用的最小舍入区间。

这可以提高收集过程的效率，因为聚合不会以任何低于 <code class="literal">minimum_interval</code>的时间间隔进行舍入。
</p>
<p><code class="literal">minimum_interval</code>可以接受的单位有：</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
year
</li>
<li class="listitem">
month
</li>
<li class="listitem">
day
</li>
<li class="listitem">
hour
</li>
<li class="listitem">
minute
</li>
<li class="listitem">
second
</li>
</ul>
</div>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /sales/_search?size=0
{
    "aggs" : {
        "sale_date" : {
             "auto_date_histogram" : {
                 "field" : "date",
                 "buckets": 10,
                 "minimum_interval": "minute"
             }
         }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/417.console"></div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_missing_value_13"></a>缺失的值
</h3>
</div></div></div>
<p>
参数 <code class="literal">missing</code> 定义应该如何处理有缺失值的文档。

默认情况下，它们会被忽略，但也可以将它们视为有一个(默认)值。
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST /sales/_search?size=0
{
    "aggs" : {
        "sale_date" : {
             "auto_date_histogram" : {
                 "field" : "date",
                 "buckets": 10,
                 "missing": "2000/01/01" <a id="CO212-1"></a><i class="conum" data-value="1"></i>
             }
         }
    }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/418.console"></div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO212-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>
在 <code class="literal">publish_date</code> 字段中没有值的文档将与值为 <code class="literal">2000-01-01</code>的文档落入同一个桶中。
</p>
</td>
</tr>
</table>
</div>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="search-aggregations-bucket-adjacency-matrix-aggregation.html">« adjacency_matrix 聚合</a>
</span>
<span class="next">
<a href="search-aggregations-bucket-children-aggregation.html">children 聚合 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>